package edu.ucue.ECU.dao;

import edu.ucue.ECU.exp.ActualizarDatosResponsableException;
import edu.ucue.ECU.exp.BuscarDatosResponsableException;
import edu.ucue.ECU.exp.EliminarDatosResponsableException;
import edu.ucue.ECU.exp.GuardarDatosResponsableException;
import edu.ucue.ECU.ngc.Responsable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class ResponsableDB {

    public void grabar(Responsable miResponsable) throws GuardarDatosResponsableException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            stmt.execute("insert into \"Responsable\" values('" + miResponsable.getCedula()+ "','" + miResponsable.getNombre()+ "','" + miResponsable.getTelefonos()+ "','" + miResponsable.getCorreos()  + "')");
            var.close();
            grabarEntidad(miResponsable);
        } catch (SQLException ex) {
            throw new GuardarDatosResponsableException("Se produjo un error inesperado al guardar los datos de responsable");
        }
    }
    
    private void grabarEntidad(Responsable miResponsable) throws GuardarDatosResponsableException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            System.out.println("insert into \"EntidadResponsable\" values(" + miResponsable.getEntidad().getIdEntidad()+ ",'" + miResponsable.getCedula()+ "')");
            stmt.execute("insert into \"EntidadResponsable\" values(" + miResponsable.getEntidad().getIdEntidad()+ ",'" + miResponsable.getCedula()+ "')");
            var.close();
        } catch (SQLException ex) {
            throw new GuardarDatosResponsableException("Se produjo un error inesperado al guardar los datos de responsable");
        }
    }
    
    
    public void modificar(Responsable miResponsable) throws ActualizarDatosResponsableException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="update \"Responsable\" set nombre='" + miResponsable.getNombre() + "',telefono='"+miResponsable.getTelefonos()+ "',correo='"+miResponsable.getCorreos()+"' where \"CI\"='" + miResponsable.getCedula() + "'";
            stmt.executeUpdate(consulta);
            var.close();
        } catch (SQLException ex) {
            throw new ActualizarDatosResponsableException("Se produjo un error inesperado al actualizar los datos de responsable");
        }
    }
    
    public void eliminar(Responsable miResponsable) throws EliminarDatosResponsableException {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="delete \"Responsable\" where \"CI\"='" + miResponsable.getCedula() + "'";
            stmt.executeUpdate(consulta);
            var.close();
        } catch (SQLException ex) {
            throw new EliminarDatosResponsableException("Se produjo un error inesperado al eliminar los datos de entidad");
        }
    }
    public Responsable buscar(Responsable miResponsable) throws BuscarDatosResponsableException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="select * from \"Responsable\" where \"CI\" ='" + miResponsable.getCedula() + "'";
            System.out.println(consulta);
            ResultSet resultado = stmt.executeQuery(consulta);
            if (resultado.next()) {
                miResponsable.setNombre(resultado.getString("nombre"));
                miResponsable.setTelefonos(resultado.getString("telefono"));
                miResponsable.setCorreos(resultado.getString("correo"));
                var.close();
                return miResponsable;
            }
            var.close();
            return null;
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            throw new BuscarDatosResponsableException("Se produjo un error inesperado al buscar los datos de responsable");
        }
    }
    
      public ArrayList listar() throws BuscarDatosResponsableException {
        try {
            ArrayList todos=new ArrayList();
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            ResultSet resultado = stmt.executeQuery("select * from \"Responsable\"");
            while (resultado.next()) {
                Responsable miResponsable = new Responsable();
                miResponsable.setCedula(resultado.getString("CI"));
                miResponsable.setNombre(resultado.getString("nombre"));
                miResponsable.setTelefonos(resultado.getString("telefono"));
                miResponsable.setCorreos(resultado.getString("correos"));
                todos.add(miResponsable);
            }var.close();
            return todos;
        } catch (SQLException ex) {
            throw new BuscarDatosResponsableException("Se produjo un error inesperado al buscar los datos de responsable");
        }
    }

}
